【010期】面试官问:你能说说 SOA 架构和微服务架构的区别么?
>>号外:往期面试题,每10篇为一个单位归置到本公众号菜单栏->聚合->面试专题,有需要的欢迎翻阅。
微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想
每个微服务有自己私有的数据库持久化业务数据
每个微服务只能访问自己的数据库,而不能访问其它服务的数据库
某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。
数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。
服务接口、请求服务模型、异常信息都放在api里面,符合重用发布等价原则,共同重用原则
api里面放入spring 的引用配置。也可以放在模块的包目录下。
尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务
服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增
不建议使用过于抽象的通用接口 T T<泛型>,接口没有明确的语义,带来后期的维护
每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑 version (maven -snapshot)
建议使用两位版本号,因为第三位版本号表示的兼容性升级,只有不兼容时才需要变更服务版本
当接口做到不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本
在provider端尽可能配置consumer端的属性
比如timeout、retires、线程池大小、LoadBalance
application上面配置的owner 、 owner建议配置2个人以上。因为owner都能够在监控中心看到
注册中心的列表
服务提供者列表
参考文献
http://www.uml.org.cn/zjjs/201708083.asp
https://zhidao.baidu.com/question/1899225333752310100.html
作者:zpoison
blog.csdn.net/zpoison/article/details/80729052
【002期】说说 hashcode() 和 equals() 的作用、区别、联系?
【003期】Java 中 Class.forName 和 ClassLoader 到底有啥区别?
【005期】了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?应对措施是什么?
【006期】面试官问:说一说 HashMap 中的容量与扩容如何实现?